#include <sys/mman.h>
 
/**
 * 将文件映射到内存区域，进程可以直接对内存区域进行读写操作，就像操作普通内存一样，但实际上是对文件设备进行读写，从而实现高效的I/0操作
 * void*addr:指向期望映射的内存起始地址的指针，通常设为NULL,让系统选择合适的地址
 * size_t length:要映射的内存区域的长度，以字节为单位
 * int prot:内存映射区域的保护标志，可以是以下标志的组合
 *          (1)PROT_READ:允许读取映区域
 *          (2)PROT_WRITE:允许写入映射区域
 *          (3)PROT_EXEC:允许执行映射区域
            (4)PROT_NONE:页面不可访问
 * int f1ags:映射选项标志
 *          (1)MAP SHARED:映射区域是共享的，对映射区域的修改会影响文件和其他映射到同一区域的进程（一般使用共享）
 *          (2)MAP_PRIVATE：映射区域是私有的，对映射区域的修改不会影响原始文件，对文件的修改会被暂时保存在一个私有副本中
 *          (3)MAP_ANONYMOUS:创建一个匿名映射，不与任何文件关联
 *          (4)MAP_FIXED:强制映射到指定的地址，如果不允许映射，将返回错误
 * int fd: 文件描述符，用于指定要映射的文件或设备，如果是匿名映射，则传入无效的文件描述符
 * off t offset: 从文件开头的偏移量，映射开始的位置
 * return void*: (1) 成功时，返回映射区域的起始地址，可以像操作普通内存那样使用这个地址进行读写
 *               (2)如果出错，返回(void*)-1,并且设置 errno 变量来表示错误原因
 */

void *mmap(void *addr,size_t length,int prot,int flags, int fd, off_t offset);

/**
 * 用于取消之前通过mmap()函数建立的内存映射关系
 * void*addr:这是指向之前通过mmap()映射的内存区域的起始地址的指针，这个地址必须是有效的，并且必须是 mmap() 返回的有效映射地址
 * size_t length:这是要解除映射的内存区域的大小（以字节为单位），它必须与之前通过mmap()映射的大小一致
 * return: int 成功 0
 *             失败-1
 */

int munmap(void *ader,size_t length);